<?php
/**
 * API统一入口
 * User: devforma
 * Date: 14/12/11
 * Time: 14:49
 */
//测试git
//ini_set('display_errors', 'on');
//error_reporting(E_ALL);

/** ---------------------------------------------
 * 时区设置
 */
date_default_timezone_set('Asia/Shanghai');


/** ---------------------------------------------
 * 定义全局变量
 */
define('LIB_DIR', __DIR__.'/library');
define('CONFIG_DIR', __DIR__.'/config');
define('PUBLIC_DIR', __DIR__.'/public');

/** ---------------------------------------------
 * 导入配置
 */
require CONFIG_DIR.'/url.config.php';    //基本url配置
require CONFIG_DIR.'/db.config.php';    //加载数据库配置
require CONFIG_DIR.'/config.php';   //加载基本配置

/** ---------------------------------------------
 * 引用基本库
 */
require LIB_DIR.'/CMSDB.class.php';
require LIB_DIR.'/UDDB.class.php';
require LIB_DIR.'/cache/cache.php';
require LIB_DIR.'/Log.class.php';
require LIB_DIR.'/utils.php';
require LIB_DIR.'/paper.php';

$memcacheServers = require CONFIG_DIR.'/cache.config.php';  //加载memcache配置
cacheInit('memcache'); //初始化cache采用memcached的形式

$respCodeMsg = require CONFIG_DIR.'/resp.config.php';   //加载返回状态码和对应信息关联数组

/**
 * 导入基础控制器interface，每个接口的处理的class必须实现该interface
 */
require PUBLIC_DIR.'/iController.php';


/** ---------------------------------------------
 * 针对请求的uri获取对应的controller进行处理
 */

if ($controller = getCtrlByUri($_SERVER['REQUEST_URI'])) {
    //Logger::startTimer(); //开始计时

    if (tooManyAttempts($_REQUEST, REQUEST_RATELIMIT_MAX, 1)) {
        $output = genOutput(4003);

    } else {

        $output = $controller->output($_REQUEST);

        if (strpos($_SERVER['REQUEST_URI'], 'plain') === false
            && (!isset($output['response_code']) || empty($output['response_code']))
        ) {
            $output = genOutput(0); //非法访问
        }
    }

    //Logger::endTimer(get_class($controller)); //结束计时，并设置标记为controller名称

} else {
    $output = genOutput(0); //非法访问
}

/** ---------------------------------------------
 * 返回结果，如果是plain目录下的，不做json格式化处理
 */

if (strpos($_SERVER['REQUEST_URI'], 'plain') === false) {
    header('Content-Type: application/json');
    echo json_encode($output);

} else {
    echo $output;
}

